package ModeloLogicoSistema;
import com.itextpdf.text.BaseColor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
//import javax.swing.text.Document;

/**
 * 
 
 */
public class Imprimir {

	private File ruta_destino = null;

	/**
	 * @web http://jc-mouse.blogspot.com/
	 * @author Mouse
	 * @throws IOException
	 * @throws DocumentException
	 */

	public void tablaprincipal(Integer idcliente , String nombre_cliente,String direccion_cliente ,Integer num_direccion_cliente, String tel_cliente, String fecha_hoy ,String fecha_pactada ,Integer cantidad_orden , String descripcion_orden,String detalle_orden,Double precio_orden,String observacion_orden,Double total_orden,Double descuento_orden,Double sena_orden,Double saldo_orden ) throws IOException, DocumentException {
             PageSize.A5.rotate( );
            
             String encabezado   = "          La Burbuja                                                          Gaspar Campos 1664                                                  Telefono   4465-2267 ";                
             String cliente      = "Nombre         "+ nombre_cliente +"                                                     ID                  "+ idcliente +"                                                                             Direccion      "+ direccion_cliente +"  "+ num_direccion_cliente +"                                                                      telefono        "+ tel_cliente +"   ";
             String fecha        = "                                 Fecha                                                                Hoy     "+ fecha_hoy +"                                                        Para    "+ fecha_pactada +"       ";              
                
             String cantidadOrden  = String.valueOf(cantidad_orden); 
             String  descripcion   = descripcion_orden;
             String  detalle       = detalle_orden;
             String  precio        = String.valueOf(precio_orden);
      
             String total        = String.valueOf(total_orden);                
             String descuento    = String.valueOf(descuento_orden);                
             String sena         = String.valueOf(sena_orden);                
             String saldo        = String.valueOf(saldo_orden);               
                 
             String Observaciones = observacion_orden;
                         
             Font fuente1  = new Font(Font.getFamily("ARIAL"),8,Font.BOLD);              
             Paragraph linea = new Paragraph(encabezado,fuente1);                   // creo el encabezado
                                 
	     Colocar_Destino();
	     FileOutputStream outputStream = new FileOutputStream(this.ruta_destino + ".pdf");
                
             PdfPTable tabla_principal = new PdfPTable(2); 
             tabla_principal.setWidthPercentage(100);               // modificamos el ancho
                               
             Document mipdf;
            mipdf = new Document(PageSize.A5);
             PdfWriter.getInstance(mipdf, outputStream);           // coloco este aca
                       
                ///////////////////////////////////// Celdas /////////////////////////////////////////////////
             
                 PdfPCell celda = new PdfPCell();                     // creo la celda 
                 celda.setFixedHeight(50);                           // modifica la altura de una celda                
                     
                 celda.addElement(linea);                             // agrego  el encabezado a la celda               
                 
                 tabla_principal.addCell(celda);                       // agrego las 2 celdas en la tabla    
                 tabla_principal.addCell(celda);
                 
                 tabla_principal.addCell(new PdfPCell(new Paragraph("  "+fecha+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                        //agrego las fechas a las celdas
                 tabla_principal.addCell(new PdfPCell(new Paragraph("  "+fecha+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                                  
                 tabla_principal.addCell(new PdfPCell(new Paragraph("  "+cliente+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                      //agrego los datos del cliente a la celda
                 tabla_principal.addCell(new PdfPCell(new Paragraph("  "+cliente+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                     
                 
                 
                PdfPTable tabla1 = new PdfPTable(4);                     // creo la tabla dentro de la celda  
                tabla1.setWidthPercentage(40);
                     
            
                PdfPCell celda1 = new PdfPCell(new Paragraph("  Cantidad      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED)));
                PdfPCell celda2 = new PdfPCell(new Paragraph("Descripcion", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED)));
                PdfPCell celda3 = new PdfPCell(new Paragraph(" Detalle       ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED)));
                PdfPCell celda4 = new PdfPCell(new Paragraph(" Precio        ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED)));
                               
                tabla1.addCell(celda1);
                tabla1.addCell(celda2);
                tabla1.addCell(celda3);
                tabla1.addCell(celda4);
                
                
                PdfPCell celda5 = new PdfPCell(new Paragraph( ""+ cantidadOrden +"", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.BLACK)));
                PdfPCell celda6 = new PdfPCell(new Paragraph("" + descripcion   +"", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.BLACK)));
                PdfPCell celda7 = new PdfPCell(new Paragraph("" + detalle       +"", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.BLACK)));
                PdfPCell celda8 = new PdfPCell(new Paragraph("" + precio        +"", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.BLACK)));
                       
                celda5.setFixedHeight(20);
                celda6.setFixedHeight(20);
                celda7.setFixedHeight(20);
                celda8.setFixedHeight(20);
                
                tabla1.addCell(celda5);
                tabla1.addCell(celda6);
                tabla1.addCell(celda7);
                tabla1.addCell(celda8);
                
            
                // creo la tabla observaciones
                   PdfPTable tabla2 = new PdfPTable(1); 
                   tabla2.setWidthPercentage(10);
                   
               //parametro observaciones
                   tabla2.addCell(new PdfPCell(new Paragraph("  Observaciones      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                  
                   
                // creo la celda de la tabla
                                       
                    PdfPCell celda9 = new PdfPCell(new Paragraph(""+ Observaciones+"", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.BLACK)));  // creo la celda
                    celda9.setFixedHeight(40);                              // modifica la altura de una celda                                     
                                        
                    tabla2.addCell(celda9);
                 //   tabla2.addCell(celda9);
                   
               
                PdfPTable tabla3 = new PdfPTable(2); 
                tabla3.setWidthPercentage(40);
             
                //tabla3.addCell("   ");
                              
                   tabla3.addCell(new PdfPCell(new Paragraph("    Total      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                   tabla3.addCell(new PdfPCell(new Paragraph("  "+total+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                 
                                    
                   tabla3.addCell(new PdfPCell(new Paragraph("    Descuento      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                   tabla3.addCell(new PdfPCell(new Paragraph("  "+descuento+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                 
                             
                   tabla3.addCell(new PdfPCell(new Paragraph("    Seña      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                   tabla3.addCell(new PdfPCell(new Paragraph("  "+sena+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                 
                
                   tabla3.addCell(new PdfPCell(new Paragraph("    Saldo      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                   tabla3.addCell(new PdfPCell(new Paragraph("  "+saldo+"      ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));                 
                    
                mipdf.open();
                
               
                
               
                
                
                 tabla_principal.addCell(tabla1);
                 tabla_principal.addCell(tabla1);
                 
                 tabla_principal.addCell("          ");
                  tabla_principal.addCell("          ");
                 
                 tabla_principal.addCell(tabla2);
                 tabla_principal.addCell(tabla2);
                 
                 tabla_principal.addCell(new PdfPCell(new Paragraph("Contablilidad", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                 tabla_principal.addCell(new PdfPCell(new Paragraph("Contablilidad", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                 
                 tabla_principal.addCell(tabla3);
                 tabla_principal.addCell(tabla3);
                                  
                 tabla_principal.addCell(new PdfPCell(new Paragraph("                                                                                                             Documento no valido como factura. La factura se confecciona al retirar .   Pasando los 30 dias se cobrara recargo                                                                             ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
                 tabla_principal.addCell(new PdfPCell(new Paragraph("                                                                                                             Documento no valido como factura. La factura se confecciona al retirar .   Pasando los 30 dias se cobrara recargo                                                                             ", FontFactory.getFont("arial",6,Font.BOLD, BaseColor.RED))));
       
                 mipdf.add(tabla_principal);                         // muestro la tabla en el pdf 
                 
                 
                      
                ///////////////////////////////////////
                
		 mipdf.close();                                                  // se cierra el PDF&
		byte[] c;
		c = mipdf.toString().getBytes();

		JOptionPane.showMessageDialog(null,
				"Ticket creado y enviandose a imprimir ....");

		try {

			outputStream = new FileOutputStream(ruta_destino);

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		}

		DocFlavor docFormat = DocFlavor.BYTE_ARRAY.AUTOSENSE;
		Doc document = new SimpleDoc(c, docFormat, null);
		PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
		PrintService defaultPrintService = PrintServiceLookup
				.lookupDefaultPrintService();
		System.out.println("Nombre impresora por defecto: "
				+ defaultPrintService.getName());
		if (defaultPrintService != null) {

			DocPrintJob printJob = defaultPrintService.createPrintJob();

			try {

				printJob.print(document, attributeSet);

			} catch (Exception e) {

				e.printStackTrace();

			}

		}
	}

	public void Colocar_Destino() {
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"Archivo PDF", "pdf", "PDF");
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.setFileFilter(filter);
		int result = fileChooser.showSaveDialog(null);
		if (result == JFileChooser.APPROVE_OPTION) {
			this.ruta_destino = fileChooser.getSelectedFile().getAbsoluteFile();
		}
        
       	}
public static void main(String[] args) throws IOException,
			DocumentException {
		Imprimir i = new Imprimir();
		//i.tablaprincipal("lucas","gaspar campos", "4465-2267");
                i.tablaprincipal(1, "carlos","salerno", 5772, "4465-2267", "22-10-2013", "30-10-2013", 4, " valet ", "nose", 24.3, "la persona lleva 4 pedidos", 40.0, 5.5, 23.0, 0.5);

	}
}
























